package com.knowledge.plus.设计模式.单例模式.懒汉式;

/**
 * 懒汉式：双重检查锁
 *
 * @author TPF
 * @since 2025/6/10
 */
public class SafeLazySingleton {

    private static volatile SafeLazySingleton instance;  // volatile 保证可见性

    private SafeLazySingleton() {}

    /**
     * 特点：
     * 按需加载：首次调用时创建实例
     * 线程安全风险：基础版存在并发问题
     * 锁机制代价：DCL版虽安全但增加复杂度
     */
    public static SafeLazySingleton getInstance() {
        if (instance == null) {                          // 第一次检查
            synchronized (SafeLazySingleton.class) {     // 同步锁
                if (instance == null) {                  // 第二次检查
                    instance = new SafeLazySingleton();
                }
            }
        }
        return instance;
    }

}
